package com.tfjybj.itoo.teach.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.teach.entity.ClassEntity;
import com.tfjybj.itoo.teach.model.ClassModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * ClassDao接口
 * class表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@Repository("classDao")
public interface ClassDao extends BaseMapper<ClassEntity> {
	
	//region 模板生成：模糊查询
    /**
     * 根据行政班名称模糊查询class
     *
     * @param name  行政班名称
     * @return 模糊查询的class
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<ClassEntity> queryLikeName(@Param("name") String name);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */
    /**
     *根据专业id查询班级信息集合（带分页）
     *  @author 杨燕梅 2018-11-13 19:30:40
     * @param professionId
     * @return 该专业下所有班级
     */
    List<ClassModel> queryByProfessionIdPageInfo(@Param("professionId") String professionId);

    /**
     *根据专业id查询班级信息集合
     *  @author 杨燕梅 2018-11-18 09:00:16
     * @param professionId
     * @return 该专业下所有班级
     */
    List<ClassModel> queryByProfessionId(@Param("professionId") String professionId);

    /**
     * 根据专业id集合查询班级信息集合
     * @author 杨燕梅 2018-11-13 19:35:31
     * @param list 专业id集合
     * @return 专业id集合下属所有班级
     */
    List<ClassModel> queryByProfessionIds(@Param("list") List<String> list);

    /**
     *根据行政班id查询专业id
     * @param classId 行政班id集合
     * @return 行政班id
     * @author 田成荣
     * @since 2.0.0 2018-11-13 19:07:35
     */
    String queryProfessionIdByClassId(@Param("classId") String classId);

    /**
     * 根据年级查询班级信息
     * @param grade
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-24 15:32:34
     */
    List<ClassModel> queryClassByGrade(@Param("grade") String grade);

    /**
     * 根据专业id和年级查询班级信息
     * @param professionId
     * @param grade
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-24 21:19:24
     */
    List<ClassModel> queryClassByProfessionIdAndGrade(@Param("professionId") String professionId, @Param("grade") String grade);

    /**
     * 根据行政班code 查询班级信息
     * @param code
     * @return
     * @author 严文文
     * @since 2.0.0 2018-11-27 10:35:34
     */
    List<ClassModel> queryClassesByCode(@Param("code") String code);

    /**
     * 根据班级名称模糊查询某一专业下属班级
     *
     * @param professionId 专业id
     * @param searchContent  行政班名称
     * @return 模糊查询的class
     * @author 杨燕梅
     * @since 2.0.0 2018-11-29 10:36:13
     */
    List<ClassModel> queryByLikeNameAndProfessionId(@Param("professionId") String professionId, @Param("searchContent") String searchContent);

    /**
     * 根据班级ID查询班级详情
     *
     * @param idList 班级ID
     * @return 班级实体集合
     * @author 杨燕梅
     * @since 2.0.0 2018-12-12 21:29:18
     */
    List<ClassModel> queryClassById(@Param("idList") List<String> idList);

    /**
     * 根据班级代码和班级名称查询班级是否已存在
     *
     * @param code   班级代码
     * @param name   班级名称
     * @return 班级code
     * @author 杨燕梅
     * @since 2.0.0 2018-12-2 11:41:04
     */
    List<ClassEntity> queryByCodeAndNameExist(@Param("code") String code, @Param("name") String name);

    /**
     * 查询所有Class
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<ClassEntity> queryAll();

    /**
     * 根据professionId查找所有行政班信息
     *
     * @param professionId 专业id
     * @return classEntityList
     * @author 智雪艳
     * @since 2.0.0 2019-05-28 10:35:56
     */
    List<ClassEntity> findByProfessionId(@Param("name") String professionId);

    /**
     * 根据专业id查询在校班级以及人员
     *
     * @param majorId
     * @param maxSession
     * @param minSession
     * @param screenClassName
     * @return 班级以及班级人员信息
     * @author 智雪艳
     * @since 2.0.0 2019-05-28 10:35:56
     */
    List<ClassModel> querySchoolClass(@Param("majorId") String majorId, @Param("maxSession") Object maxSession, @Param("minSession") Object minSession, @Param("screenClassName") String screenClassName);
}
